package cn.sylinx.common.ext.date;

import java.text.ParseException;
import java.util.Date;

/**
 * 显示时间工具类
 * 
 * @author johnhan
 *
 */
public class TimeShowUtil {

	/**
	 * 1分钟
	 */
	public static final long ONE_MIN = 60 * 1000l;

	/**
	 * 1小时
	 */
	public static final long ONE_HOUR = ONE_MIN * 60;

	/**
	 * 1天
	 */
	public static final long ONE_DAY = ONE_HOUR * 24;

	/**
	 * 1个月
	 */
	public static final long ONE_MONTH = ONE_DAY * 30;

	/**
	 * 显示时间：<br>
	 * eg: 刚刚，1分钟前、2分钟前、3分钟前、...、1小时前、2小时前、...、1天前、2天前、...、超过1个月显示具体时间。
	 * 
	 * @param d
	 * @return
	 */
	public static String show(String timeStr) {

		Date d = null;
		try {
			d = DateUtil.SF.parse(timeStr);
		} catch (ParseException e) {
			d = new Date();
		}

		return show(d);
	}

	/**
	 * 显示时间：<br>
	 * eg: 刚刚，1分钟前、2分钟前、3分钟前、...、1小时前、2小时前、...、1天前、2天前、...、超过1个月显示具体时间。
	 * 
	 * @param d
	 * @return
	 */
	public static String show(Date d) {

		// 比较时间
		long dlong = d.getTime();
		// 当前时间
		long clong = System.currentTimeMillis();

		long dif = clong - dlong;

		// 是否大于30天
		if (dif > TimeShowUtil.ONE_MONTH) {
			// 直接显示日期
			return DateUtil.getDate(d);
		}

		long dif_day = dif / ONE_DAY;
		if (dif_day > 0) {
			// 如果超过1天
			return dif_day + "天前";
		}

		long dif_hour = dif / ONE_HOUR;
		if (dif_hour > 0) {
			// 如果超过1小时
			return dif_hour + "小时前";
		}

		long dif_min = dif / ONE_MIN;
		if (dif_min > 0) {
			// 如果超过1分钟
			return dif_min + "分钟前";
		}

		return "刚刚";
	}

}
